/**
 * **************************************************************************
 *
 * @说明: 
 * @项目名称: talent-proxy-mysql-common
 *
 * @author: tanyaowu 
 * @创建时间: 2017年1月19日 下午3:19:39
 *
 * **************************************************************************
 */
package com.talent.proxy.mysql.common;

import java.util.concurrent.atomic.AtomicLong;

import com.talent.proxy.mysql.common.packets.s2c.HandshakePacket;

/**
 * 参考文档：http://blog.csdn.net/wangyangzhizhou/article/details/54232270
 * @author tanyaowu 
 * @创建时间 2017年1月19日 下午3:19:39
 *
 * @操作列表
 *  编号	| 操作时间	| 操作人员	 | 操作说明
 *  (1) | 2017年1月19日 | tanyaowu | 新建类
 *
 */
public class MysqlExt
{

	private java.util.concurrent.atomic.AtomicLong seq = new AtomicLong();

	private SessionStatus sessionStatus = null;

	/**
	 * 是否已经握过手了
	 */
	private HandshakePacket handshakePacket = null;

	/**
	 * 是否已经授权过了
	 */
	private boolean isAuthed = false;

	public void init()
	{
		setHandshakePacket(null);
	}

	/**
	 * 
	 *
	 * @author: tanyaowu
	 * @创建时间:　2017年1月19日 下午3:19:39
	 * 
	 */
	public MysqlExt()
	{

	}

	public static long clientFlags = 0;

	

	/**
	 * @param args
	 *
	 * @author: tanyaowu
	 * @创建时间:　2017年1月19日 下午3:19:39
	 * 
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub

	}

	/**
	 * @return the sessionStatus
	 */
	public SessionStatus getSessionStatus()
	{
		return sessionStatus;
	}

	/**
	 * @param sessionStatus the sessionStatus to set
	 */
	public void setSessionStatus(SessionStatus sessionStatus)
	{
		this.sessionStatus = sessionStatus;
	}

	/**
	 * @return the handshakePacket
	 */
	public HandshakePacket getHandshakePacket()
	{
		return handshakePacket;
	}

	/**
	 * @param handshakePacket the handshakePacket to set
	 */
	public void setHandshakePacket(HandshakePacket handshakePacket)
	{
		this.handshakePacket = handshakePacket;
	}

	/**
	 * @return the isAuthed
	 */
	public boolean isAuthed()
	{
		return isAuthed;
	}

	/**
	 * @param isAuthed the isAuthed to set
	 */
	public void setAuthed(boolean isAuthed)
	{
		this.isAuthed = isAuthed;
	}

	/**
	 * @return the seq
	 */
	public java.util.concurrent.atomic.AtomicLong getSeq()
	{
		return seq;
	}

	/**
	 * @param seq the seq to set
	 */
	public void setSeq(java.util.concurrent.atomic.AtomicLong seq)
	{
		this.seq = seq;
	}

	public static enum SessionStatus
	{
		// client start
		/**
		 * 
		 */
		CLIENT_WAITING_HANDSHAKE("waiting handshake"),

		/**
		 * 等待授权响应
		 */
		CLIENT_WAITING_AUTH_RESP("waiting auth resp"),

		/**
		 * 已经连接上了
		 */
		CLIENT_CONNECTED("connected"),

		/**
		 * 等待查询结果
		 */
		CLIENT_WAITING_RESULTSET("waiting waiting resultset"),
		// client end

		//server
		SERVER_WAITING_AUTH("waiting auth");

		private String name;

		public String getName()
		{
			return this.name;
		}

		private SessionStatus(String name)
		{
			this.name = name;
		}
	}
}
